package com.partsoft.dits.integrate;

import com.partsoft.dits.DataDescriptorManager;
import com.partsoft.dits.TableDataEdgeDescriptor;

/**
 * 数据表集成保存描述符注册管理器
 */
public interface TableDataSavedDescriptorManager extends TableDataDescriptorRegistry<BaseTableDataEdgeDescriptor>, DataDescriptorManager<BaseTableDataEdgeDescriptor> {
	
	/**
	 * 是否有指定的描述符
	 * @param descritpor 指定的描述符
	 * @return 有则返回true,否则返回false
	 */
	boolean hasDescriptor(BaseTableDataEdgeDescriptor descriptor);
	
	/**
	 * 添加一个描述符
	 * @param descriptor 指定的描述符
	 * @return 添加后的描述符
	 * @exception RuntimeException 如果存在相同的描述符，则抛出异常。
	 */
	BaseTableDataEdgeDescriptor addDescriptor(BaseTableDataEdgeDescriptor descriptor) throws RuntimeException;
	
	/**
	 * 移除描述符
	 * @param descriptor 指定的描述符
	 * @return 如果成功移除则返回true， 否则返回false
	 */
	BaseTableDataEdgeDescriptor removeDescriptor(BaseTableDataEdgeDescriptor descriptor);
	
	/**
	 * 编辑描述符
	 * @param descriptor 需要保存的描述符
	 * @return 返回修改后的描述符。
	 */
	BaseTableDataEdgeDescriptor modifyDescriptor(BaseTableDataEdgeDescriptor descriptor);
	
	
	/**
	 * 判断ID是否存在
	 * @param id
	 * @return
	 */
	boolean hasDescriptor(String id);
	
	/**
	 * 根据ID移除描述符
	 * @param id 
	 */
	BaseTableDataEdgeDescriptor removeDescriptor(String id);

	
	/**
	 * 获取指定的描述符
	 * @param dsName 数据源名称
	 * @param schemaName 模式名称
	 * @param tableName 数据表名称
	 * @param messageCode 消息代码
	 * @return 实现{@link TableDataEdgeDescriptor}接口的对象
	 */
	BaseTableDataEdgeDescriptor getDescriptor(String dsName, String schemaName, String tableName, String messageCode);
	
	/**
	 * 获取指定的描述符列表
	 * @param dsName 数据源名称
	 * @param schemaName 模式名称
	 * @param tableName 数据表名称
	 * @return 实现{@link TableDataEdgeDescriptor}接口的对象数组
	 */
	BaseTableDataEdgeDescriptor[] getDescriptors(String dsName, String schemaName, String tableName);
	
	/**
	 * 获得描述符个数
	 * @param dsName 数据源名称
	 * @param schemaName 模式名称
	 * @param tableName 数据表名称
	 * @return 个数
	 */
	int countDescriptor(String dsName, String schemaName, String tableName);
	
	/**
	 * 支持的描述符类
	 */
	Class<BaseTableDataEdgeDescriptor> getSupportClass();

	/**
	 * 获得所有的描述符
	 */
	BaseTableDataEdgeDescriptor[] getDescriptors();
	
	/**
	 * 根据消息代码获取边界描述符
	 * @param messageCode 消息代码
	 */
	BaseTableDataEdgeDescriptor[] getDescriptors(String messageCode);
	
	/**
	 * 根据描述符ID获取描述符
	 * @return
	 * @exception RuntimeException 如果找不到则抛出异常
	 */
	BaseTableDataEdgeDescriptor getDescriptor(String id) throws RuntimeException;
	
	/**
	 * 根据消息代码返回描述符总数
	 * @param messageCode 消息代码
	 * @return 个数
	 */
	int countDescriptor(String messageCode);
	
	/**
	 * 描述符个数
	 * @return
	 */
	int countDescriptor();
	
}
